<?php
// +-------------------------------------------------------------------------------
// | DingZone [ A Rapid Development Framework For Dingtalk ]
// +-------------------------------------------------------------------------------
// | 钉钉部门新建及修改请求类 v1.0
// |
// | Copyright (c) 2014-2018 http://www.heimalanshi.com All rights reserved.
// | Author : Jie
// | Date : 2018-08-09
// +-------------------------------------------------------------------------------

namespace ding\request;


class DepartmentSaveRequest extends DingApiRequest {
    /**
     * 部门id
     * @var int
     */
    private $id;
    /**
     * 部门名称。长度限制为1~64个字符。不允许包含字符‘-’‘，’以及‘,’。
     * @var string
     */
    private $name;
    /**
     * 父部门id。根部门id为1
     * @var string
     */
    private $parentid;
    /**
     * 在父部门中的次序值。order值小的排序靠前
     * @var int
     */
    private $order;
    /**
     * 是否创建一个关联此部门的企业群，默认为false
     * @var bool
     */
    private $createDeptGroup;
    /**
     * 是否隐藏部门, true表示隐藏, false表示显示
     * @var bool
     */
    private $deptHiding;
    /**
     * 可以查看指定隐藏部门的其他部门列表，如果部门隐藏，则此值生效，取值为其他的部门id组成的的字符串，使用 | 符号进行分割。总数不能超过200。
     * @var string
     */
    private $deptPerimits;
    /**
     * 可以查看指定隐藏部门的其他人员列表，如果部门隐藏，则此值生效，取值为其他的人员userid组成的的字符串，使用| 符号进行分割。总数不能超过200。
     * @var string
     */
    private $userPerimits;
    /**
     * 是否本部门的员工仅可见员工自己, 为true时，本部门员工默认只能看到员工自己
     * @var bool
     */
    private $outerDept;
    /**
     * 本部门的员工仅可见员工自己为true时，可以配置额外可见部门，值为部门id组成的的字符串，使用|符号进行分割。总数不能超过200。
     * @var string
     */
    private $outerPermitDepts;
    /**
     * 本部门的员工仅可见员工自己为true时，可以配置额外可见人员，值为userid组成的的字符串，使用|符号进行分割。总数不能超过200。
     * @var string
     */
    private $outerPermitUsers;
    /**
     * 部门标识字段，开发者可用该字段来唯一标识一个部门，并与钉钉外部通讯录里的部门做映射
     * @var string
     */
    private $sourceIdentifier;

    /**
     * 构造函数对外不可见
     */
    private function __construct() {
    }

    /**
     * 部门创建请求
     *
     * @param $name
     * @param int $parentid
     * @return static
     */
    public static function departmentCreateRequest($name, $parentid = 1) {
        $req = new static();
        $req->name = $name;
        $req->parentid = $parentid;
        return $req;
    }

    /**
     * 部门更新请求
     *
     * @param $id
     * @return static
     */
    public static function departmentUpdateRequest($id) {
        $req = new static();
        $req->id = $id;
        return $req;
    }

    /**
     * @return int
     */
    public function getId() {
        return $this->id;
    }

    /**
     * @param int $id
     * @return DepartmentSaveRequest
     */
    public function setId($id) {
        $this->id = $id;
        return $this;
    }

    /**
     * @return string
     */
    public function getName() {
        return $this->name;
    }

    /**
     * @param string $name
     * @return DepartmentSaveRequest
     */
    public function setName($name) {
        $this->name = $name;
        return $this;
    }

    /**
     * @return string
     */
    public function getParentid() {
        return $this->parentid;
    }

    /**
     * @param string $parentid
     * @return DepartmentSaveRequest
     */
    public function setParentid($parentid) {
        $this->parentid = $parentid;
        return $this;
    }

    /**
     * @return int
     */
    public function getOrder() {
        return $this->order;
    }

    /**
     * @param int $order
     * @return DepartmentSaveRequest
     */
    public function setOrder($order) {
        $this->order = $order;
        return $this;
    }

    /**
     * @return bool
     */
    public function isCreateDeptGroup() {
        return $this->createDeptGroup;
    }

    /**
     * @param bool $createDeptGroup
     * @return DepartmentSaveRequest
     */
    public function setCreateDeptGroup($createDeptGroup) {
        $this->createDeptGroup = $createDeptGroup;
        return $this;
    }

    /**
     * @return bool
     */
    public function isDeptHiding() {
        return $this->deptHiding;
    }

    /**
     * @param bool $deptHiding
     * @return DepartmentSaveRequest
     */
    public function setDeptHiding($deptHiding) {
        $this->deptHiding = $deptHiding;
        return $this;
    }

    /**
     * @return string
     */
    public function getDeptPerimits() {
        return $this->deptPerimits;
    }

    /**
     * @param string $deptPerimits
     * @return DepartmentSaveRequest
     */
    public function setDeptPerimits($deptPerimits) {
        $this->deptPerimits = $deptPerimits;
        return $this;
    }

    /**
     * @return string
     */
    public function getUserPerimits() {
        return $this->userPerimits;
    }

    /**
     * @param string $userPerimits
     * @return DepartmentSaveRequest
     */
    public function setUserPerimits($userPerimits) {
        $this->userPerimits = $userPerimits;
        return $this;
    }

    /**
     * @return bool
     */
    public function isOuterDept() {
        return $this->outerDept;
    }

    /**
     * @param bool $outerDept
     * @return DepartmentSaveRequest
     */
    public function setOuterDept($outerDept) {
        $this->outerDept = $outerDept;
        return $this;
    }

    /**
     * @return string
     */
    public function getOuterPermitDepts() {
        return $this->outerPermitDepts;
    }

    /**
     * @param string $outerPermitDepts
     * @return DepartmentSaveRequest
     */
    public function setOuterPermitDepts($outerPermitDepts) {
        $this->outerPermitDepts = $outerPermitDepts;
        return $this;
    }

    /**
     * @return string
     */
    public function getOuterPermitUsers() {
        return $this->outerPermitUsers;
    }

    /**
     * @param string $outerPermitUsers
     * @return DepartmentSaveRequest
     */
    public function setOuterPermitUsers($outerPermitUsers) {
        $this->outerPermitUsers = $outerPermitUsers;
        return $this;
    }

    /**
     * @return string
     */
    public function getSourceIdentifier() {
        return $this->sourceIdentifier;
    }

    /**
     * @param string $sourceIdentifier
     * @return DepartmentSaveRequest
     */
    public function setSourceIdentifier($sourceIdentifier) {
        $this->sourceIdentifier = $sourceIdentifier;
        return $this;
    }
}